"""
应用设置配置文件
用于管理应用的全局配置，包括JWT、CORS、日志等设置
从环境变量读取配置，提供默认值
原理：集中管理应用配置，便于维护和部署
"""

import os
from typing import List
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()


class Settings:
    """应用配置类"""
    
    # 应用基础配置
    APP_NAME: str = os.getenv("APP_NAME", "brainwave_cloud_analyzer")
    APP_VERSION: str = os.getenv("APP_VERSION", "1.0.0")
    APP_DEBUG: bool = os.getenv("APP_DEBUG", "True").lower() == "true"
    APP_HOST: str = os.getenv("APP_HOST", "0.0.0.0")
    APP_PORT: int = int(os.getenv("APP_PORT", 8001))
    
    # CORS配置
    CORS_ORIGINS: List[str] = os.getenv("CORS_ORIGINS", "http://localhost:3000,http://127.0.0.1:3000,http://localhost:8080,http://127.0.0.1:8080").split(",")
    
    # 日志配置
    LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO")
    LOG_FILE: str = os.getenv("LOG_FILE", "logs/app.log")
    
    # 时区配置
    TIMEZONE: str = os.getenv("TIMEZONE", "Asia/Shanghai")
    
    # API配置
    API_V1_PREFIX: str = os.getenv("API_V1_PREFIX", "/api")
    
    # 分页配置
    DEFAULT_PAGE_SIZE: int = int(os.getenv("DEFAULT_PAGE_SIZE", 20))
    MAX_PAGE_SIZE: int = int(os.getenv("MAX_PAGE_SIZE", 100))
    
    # YASA睡眠分析器配置
    YASA_WINDOW_DURATION: int = int(os.getenv("YASA_WINDOW_DURATION", 7200))  # 2小时
    YASA_EPOCH_DURATION: int = int(os.getenv("YASA_EPOCH_DURATION", 30))     # 30秒epoch
    YASA_MIN_EPOCHS: int = int(os.getenv("YASA_MIN_EPOCHS", 10))             # 最少10个epoch（5分钟），符合YASA推荐
    YASA_SAMPLING_RATE: int = int(os.getenv("YASA_SAMPLING_RATE", 512))      # 采样率，匹配NeuroSky设备
    YASA_ANALYSIS_INTERVAL: int = int(os.getenv("YASA_ANALYSIS_INTERVAL", 30))  # 分析间隔
    
    # 云端数据上传配置
    CLOUD_STORAGE_BASE_URL: str = os.getenv("CLOUD_STORAGE_BASE_URL", "http://192.168.2.12:9000/api/v1")
    RAW_DATA_UPLOAD_ENDPOINT: str = os.getenv("RAW_DATA_UPLOAD_ENDPOINT", "/eeg/raw")
    REALTIME_DATA_ENDPOINT: str = os.getenv("REALTIME_DATA_ENDPOINT", "/analysis/data")
    RAW_DATA_UPLOAD_INTERVAL: int = int(os.getenv("RAW_DATA_UPLOAD_INTERVAL", 10))  # 原始数据上传间隔（秒）
    RAW_DATA_UPLOAD_TIMEOUT: int = int(os.getenv("RAW_DATA_UPLOAD_TIMEOUT", 60))   # 原始数据上传超时（秒）
    REALTIME_DATA_TIMEOUT: int = int(os.getenv("REALTIME_DATA_TIMEOUT", 30))       # 实时数据上传超时（秒）


# 创建配置实例
settings = Settings()